﻿/********************************************************************************
 * Developed by Phil Tyler (http://www.laidbackcoder.co.uk)
 * 
 * Cryptosolic is Licensed under the GNU Lesser General Public License (LGPL)
 * http://cryptosolic.codeplex.com/license
 * *****************************************************************************/
using Cryptosolic.Security;

namespace Cryptosolic.Security.Hashing
{
    /// <summary>
    /// Interface to define all implementations of Hashing Algorithms in this project
    /// </summary>
    public interface IHashingAlgorithm
    {
        /// <summary>
        /// Hash a Human Readable String
        /// </summary>
        /// <param name="data">Data to be Hashed</param>
        /// <returns>hashed Data Data</returns>
        CipherText HashData(string data);

        /// <summary>
        /// Hash a Human Readable String
        /// </summary>
        /// <param name="data">Data to be Hashed</param>
        /// <param name="iterations">Number of Hash Iterations before Returning a Value</param>
        /// <returns>hashed Data Data</returns>
        CipherText HashData(string data, int iterations);

        /// <summary>
        /// Hash a Human Readable Byte Array
        /// </summary>
        /// <param name="data">Data to be Hashed</param>
        /// <returns>hashed Data Data</returns>
        CipherText HashData(byte[] data);

        /// <summary>
        /// Hash a Human Readable Byte Array
        /// </summary>
        /// <param name="data">Data to be Hashed</param>
        /// <param name="iterations">Number of Hash Iterations before Returning a Value</param>
        /// <returns>hashed Data Data</returns>
        CipherText HashData(byte[] data, int iterations);
    }
}
